
g = 100
function fn() {
  console.log(g);
  g = 200
  console.log(g);
  var g = 300
}
fn()
GO:{
    fn:fn(){}

}
AO:{
    g=undefined
}


function first() {
  console.log('inside first function');
  second();
  console.log('back to first function');
}

function second() {
  console.log('inside second function');
}

first();
console.log('inside global context');

// 执行顺序和栈的变化：
// 1. 栈: [global]
// 2. 调用 first() -> 栈: [global, first()]
// 3. 执行 first(), 遇到 console.log -> 输出 "inside first function"
// 4. 调用 second() -> 栈: [global, first(), second()]
// 5. 执行 second(), 遇到 console.log -> 输出 "inside second function"
// 6. second() 执行完毕 -> 栈: [global, first()]
// 7. 继续执行 first(), 遇到 console.log -> 输出 "Back to first function"
// 8. first() 执行完毕 -> 栈: [global]
// 9. 继续执行全局代码，遇到 console.log -> 输出 "inside global context"


// var a = 1;
// function foo(b) {
//   var c = 3;
//   function bar() {}
//   var d = function() {};
// }
// foo(2);